#include <stdio.h>

// #define LOG(msg) printf("%s\n", msg)
// int main()
// {
//     LOG("hello");
//     return 0;
// }

// #define LOG(format, msg) printf(format "\n", msg)
// int main()
// {
//     LOG("%d", 99);
//     return 0;
// }

// 添加文件名与行号
// #define LOG(format, msg) printf("[%s: %d] "format "\n", __FILE__, __LINE__, msg)
// int main()
// {
//     LOG("%d", 99);
//     return 0;
// }

#include <time.h>
// 添加时间
// #define LOG(format, msg) {\
//     time_t t = time(NULL);\
//     struct tm* lt = localtime(&t);\
//     char time_tmp[32] = {0};\
//     strftime(time_tmp, 31, "%m-%d %T", lt);\    
//     printf("[%s][%s: %d] "format "\n", time_tmp, __FILE__, __LINE__, msg);\
// }
// int main()
// {
//     LOG("%d", 99);
//     return 0;
// }

// 添加可变参数
// #define LOG(format, ...) {\
//     time_t t = time(NULL);\
//     struct tm* lt = localtime(&t);\
//     char time_tmp[32] = {0};\
//     strftime(time_tmp, 31, "%m-%d %T", lt);\    
//     printf("[%s][%s: %d] "format "\n", time_tmp, __FILE__, __LINE__, ##__VA_ARGS__);\
// }
// int main()
// {
//     LOG("%s-%d","hello", 99);
//     return 0;
// }

// 引入日志等级
#define LDBG 0
#define LINF 1
#define LERR 2
#define LDEFAULT LDBG
#define LOG(level, format, ...) {\
    if(level >= LDEFAULT)\
    {\
        time_t t = time(NULL);\
        struct tm* lt = localtime(&t);\
        char time_tmp[32] = {0};\
        strftime(time_tmp, 31, "%m-%d %T", lt);\    
        printf("[%s][%s: %d] "format "\n", time_tmp, __FILE__, __LINE__, ##__VA_ARGS__);\
    }\
}
#define DLOG(format, ...) LOG(LDBG, format, ##__VA_ARGS__);
#define ILOG(format, ...) LOG(LINF, format, ##__VA_ARGS__);
#define ELOG(format, ...) LOG(LERR, format, ##__VA_ARGS__);

int main()
{
    DLOG("hello");
    return 0;
}